// 创建一个可复用的逻辑块
const myMixin = () => {
  /**
   * setListValue 生成一个用arr中每个下标数据为key，value对象数据为value的新对象
   * 例子：
    arr = ['menuName', 'menuCode', 'menuDesc', 'menuShow', 'parentId', 'icon']
    value = {
      menuName: '', // 菜单名称
      menuCode: '', // 菜单code
      menuDesc: '', // 菜单描述
      parentId: '', // 上级菜单id
      menuShow: true, // 菜单是否展示 true(1) 展示 、false(0) 不展示
      icon: '', // 图标
    }
  */
  const setListValue = (arr: any, value: any) => {
    let obj = {};
    for (let i of arr) {
      obj[i] = value ? value[i] : '';
    }
    return obj;
  };

  /**
   * buildTree 将tree扁平化数据重新组装为tree结构数据
   * data例子：
    const data = [
      { id: 1, name: 'Node 1', parentId: '0' },
      { id: 2, name: 'Node 1.1', parentId: 1 },
      { id: 3, name: 'Node 1.2', parentId: 1 },
      { id: 4, name: 'Node 1.1.1', parentId: 2 },
      { id: 5, name: 'Node 2', parentId: '0' },
      { id: 6, name: 'Node 2.1', parentId: 5 },
    ];
   *
  */
  const buildTree = (data) => {
    const tree = [];
    const map = {};
    // 将数据转换为以id为键的映射对象
    data.forEach((item) => {
      map[item.id] = { ...item, children: [] };
    });
    // 遍历数据，将每个节点添加到其父节点的children数组中
    data.forEach((item) => {
      if (item.parentId != 0) {
        const parent = map[item.parentId];
        if (parent) {
          parent.children.push(map[item.id]);
        }
      } else {
        tree.push(map[item.id]);
      }
    });
    return tree;
  };


  // 返回需要共享的数据和方法
  return {
    setListValue,
    buildTree
  };
};

export default myMixin;